Integrating OWASP ZAP Scans into Selenium Tests
In today’s web-driven world, robust web application security is an absolute necessity. Even minor vulnerabilities can have catastrophic consequences, leading to data breaches, financial losses, and reputational damage.
Consider a crypto trading platform: if the API for retrieving customer information lacks proper authorization, one customer could easily access details of all customers, resulting in a data breach.
As a QA professional, how can you incorporate security checks into your existing Selenium test automation scripts? This guide explores how to integrating OWASP ZAP scans into selenium, a powerful dynamic web application security scanner, with Selenium WebDriver for automated security testing within your Selenium test suite.
Why Security Automation Matters
Security should be a top priority throughout the Software Development Lifecycle (SDLC). Early detection of vulnerabilities is crucial to minimize risks and ensure a secure product launch.
However, manual security testing can be time-consuming and resource-intensive, especially for complex web applications. This is where automation comes in.
Introducing OWASP ZAP
OWASP ZAP (Zed Attack Proxy) is a free and open-source web application security scanner developed by the Open Web Application Security Project (OWASP). ZAP acts as a man-in-the-middle proxy, intercepting traffic between your browser and the web application under test. It then analyzes the intercepted traffic for vulnerabilities using various techniques such as SQL injection testing, cross-site scripting (XSS) detection, and security misconfigurations.
Benefits of Early ZAP Scan Integration
Integrating OWASP ZAP scans into Selenium tests early in the testing lifecycle offers several advantages:
- Automated Vulnerability Detection: ZAP automates security checks, freeing up testers’ time for analysis and remediation efforts.
- Shift-Left Security: Early detection of vulnerabilities allows for faster fixes and cost savings compared to finding them later in the development cycle.
- Improved Code Quality: By proactively identifying vulnerabilities, you can ensure higher code quality and a more secure application from the outset.
Step-by-Step Guide: Integrating ZAP with Selenium Tests
Now, let’s dive into the practical steps for integrating OWASP ZAP scans into selenium:
1. Installing and Starting ZAP Proxy:
- Download and install OWASP ZAP from the official website (https://www.zaproxy.org/download/).
- When ZAP is successfully installed, launch the ZAP Proxy application.
- At startup, it will ask if you want to persist the ZAP session. Select “No” and click start.
To make sure the proxy is started and running, open localhost:8080
in your choice of browser. It should display a welcome page like below.
ZAP is now up and running, scanning all traffic passing through the proxy.
Navigate to Tools > Option > API, and save the Zap API key. It will be used later in the implementation.
Now that its done, lets move on to selenium side of implementation.
2. Adding ZAP to POM.xml (Maven Project):
Assuming you’re using Maven for project management, add the ZAP Client library to your pom.xml
file. Here’s the example dependency
<!-- https://mvnrepository.com/artifact/org.zaproxy/zap-clientapi -->
<dependency>
<groupId>org.zaproxy</groupId>
<artifactId>zap-clientapi</artifactId>
<version>1.14.0</version>
</dependency>
Note: ZAP client libraries are available in all popular programming languages. You can find more information here.
3. Redirecting Selenium Traffic through ZAP Proxy:
Now you need to configure Selenium WebDriver to route traffic through the ZAP Proxy.
Let’s create a basic test that interacts with a web application and redirect its traffic through ZAP proxy. For this we need to follow below steps before driver intialization:
- Create an instance of
org.openqa.selenium.Proxy
- Set http and ssl proxy to ZAP proxy(
localhost:8080
) - Update ChromeOptions to use this proxy instance.
Below is the code snippet to setup proxy in selenium and initialise WebDriver with it.
// Set WebDriver proxy
String proxyUrl = "localhost:8080";
Proxy proxy = new Proxy();
proxy.setHttpProxy(proxyUrl);
proxy.setSslProxy(proxyUrl);
//Configure ChromeOption
ChromeOptions co = new ChromeOptions();
co.setAcceptInsecureCerts(true);
co.setProxy(proxy);
// Initialize WebDriver (replace with your desired browser with ChromeOptions)
WebDriver driver = new ChromeDriver(co);
With the proxy set up, all Selenium traffic will be redirected through ZAP.
4. Generating a ZAP Report:
ZAP offers various options for generating reports on identified vulnerabilities. You can use the ZAP GUI or its API to access detailed reports. Lets use Zap API client for report generation, so it can be done programatically in tear down.
Below is the code snippet that will create api client for zap api and generate the report.
// Iniotialise Zap API client
ClientApi clientApi = new ClientApi("localhost","8080","your-api-key");
// generate Zap report from scanned traffic
if(clientApi != null) {
ApiResponse res = null;
try {
res = clientApi.reports.generate("Zap Security Report", "traditional-html",
null, "Demo zap integration with selenium", null,
null,null, null, null, "zap-security-report.html",
null,System.getProperty("user.dir"), null);
System.out.println("Zap report generated successfully at " + res.toString());
} catch (ClientApiException e) {
throw new RuntimeException(e);
}
}
generate function take numerous parameters but you only need to provide a few required one, rest you can leave null.
5. Lets Try It Out With A Demo Run:
Run your Selenium test with the integrated ZAP scan. The path to the generated report will be displayed in your console if you’re using the code snippet provided above
zap report generated successfully at /Users/default/Project/SeleniumJava_BoilerPlate/zap-security-report.html
Open this path in any browser of your choice and you will be able to see a basic HTML security report.
This is a basic example. You can customize it further by integrating ZAP’s API calls within your Selenium scripts to trigger specific scans or manipulate ZAP settings dynamically.
For a reference implementation (proof of concept – POC), you can visit this GitHub repository: here
If you find it useful, then you can follow binmile on github and give this repo a star.
Conclusion
By integrating OWASP ZAP with Selenium WebDriver, you can significantly enhance your web application security testing practices. This powerful combination allows for automated vulnerability detection, early identification of security flaws, and a more secure application throughout the development process. Remember, security is an ongoing journey. Continuously refine your testing practices.
To learn more interesting thing related to security please follow staleelement.com .
Sabbir
Hi ! It’s an amazing blog. I’ve worked on it too but facing an issue while running it.
Here’s the log from the console:
“[INFO] Scanning for projects…
[INFO]
[INFO] ——————————————–
[INFO] Building selenium-zap 1.0-SNAPSHOT
[INFO] from pom.xml
[INFO] ——————————–[ jar ]———————————
[INFO]
[INFO] — exec-maven-plugin:3.2.0:java (default-cli) @ selenium-zap —
Title: Google
org.zaproxy.clientapi.core.ClientApiException: Does Not Exist
at org.zaproxy.clientapi.core.ApiResponseFactory.getResponse(ApiResponseFactory.java:50)
at org.zaproxy.clientapi.core.ClientApi.callApi(ClientApi.java:390)
at org.zaproxy.clientapi.core.ClientApi.callApi(ClientApi.java:379)
at org.zaproxy.clientapi.gen.Reports.generate(Reports.java:114)
at com.example.SeleniumTest.main(SeleniumTest.java:41)
at org.codehaus.mojo.exec.ExecJavaMojo.doMain(ExecJavaMojo.java:385)
at org.codehaus.mojo.exec.ExecJavaMojo.doExec(ExecJavaMojo.java:374)
at org.codehaus.mojo.exec.ExecJavaMojo.lambda$execute$0(ExecJavaMojo.java:296)
at java.base/java.lang.Thread.run(Thread.java:834)
[WARNING] thread Thread[UrlChecker-2,5,com.example.SeleniumTest] was interrupted but is still alive after waiting at least 14997msecs
[WARNING] thread Thread[UrlChecker-2,5,com.example.SeleniumTest] will linger despite being asked to die via interruption
[WARNING] NOTE: 1 thread(s) did not finish despite being asked to via interruption. This is not a problem with exec:java, it
is a problem with the running code. Although not serious, it should be remedied.
[WARNING] Couldn’t destroy threadgroup org.codehaus.mojo.exec.ExecJavaMojo$IsolatedThreadGroup[name=com.example.SeleniumTest,maxpri=10]
java.lang.IllegalThreadStateException
at java.lang.ThreadGroup.destroy (ThreadGroup.java:776)
at org.codehaus.mojo.exec.ExecJavaMojo.execute (ExecJavaMojo.java:340)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:370)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:351)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:215)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:171)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:163)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:299)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:193)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:106)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:963)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:296)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:199)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:566)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 20.472 s
[INFO] Finished at: 2024-07-12T03:17:08+06:00
[INFO] ————————————————————————“
Here’s my pom.xml:
“
4.0.0
com.example
selenium-zap
jar
1.0-SNAPSHOT
selenium-zap
http://maven.apache.org
org.seleniumhq.selenium
selenium-java
4.22.0
org.zaproxy
zap-clientapi
1.14.0
org.apache.maven.plugins
maven-compiler-plugin
3.13.0
1.8
1.8
org.codehaus.mojo
exec-maven-plugin
3.2.0
java
com.example.SeleniumTest
“
Here’s my SeleniumTest.java class:
“package com.example;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.Proxy;
import org.zaproxy.clientapi.core.ClientApi;
import org.zaproxy.clientapi.core.ApiResponse;
import org.zaproxy.clientapi.core.ClientApiException;
public class SeleniumTest {
public static void main(String[] args) {
// Set the path to the chromedriver executable
System.setProperty(“webdriver.chrome.driver”, “C:\Sabbir\selenium-zap\selenium-zap\chromedriver.exe”);
// Set WebDriver proxy
String proxyUrl = “localhost:8080”;
Proxy proxy = new Proxy();
proxy.setHttpProxy(proxyUrl);
proxy.setSslProxy(proxyUrl);
ChromeOptions options = new ChromeOptions();
options.setAcceptInsecureCerts(true);
options.setProxy(proxy);
options.addArguments(“–remote-allow-origins=*”);
WebDriver driver = new ChromeDriver(options);
try {
// Launch a new browser session and navigate to a URL
driver.get(“https://google.com/”);
// Print the title of the page
System.out.println(“Title: ” + driver.getTitle());
// Initialize ZAP API client
ClientApi clientApi = new ClientApi(“localhost”, 8080, “tcn1k1ks2345k4fbrjq555nnet”);
// Generate ZAP report from scanned traffic
if (clientApi != null) {
ApiResponse res = clientApi.reports.generate(
“Zap Security Report”, // Title
“html”, // Report format
null, // Theme
“Demo zap integration with selenium”, // Description
null, // ContextId
null, // Sites
null, // Sections
null, // Include Passive Scan results
“zap-security-report.html”, // Report Filename
null, // Templates
System.getProperty(“user.dir”), // Output Directory
null, // Config
null // ReportFile
);
System.out.println(“ZAP report generated successfully at ” + res.toString());
}
} catch (ClientApiException e) {
e.printStackTrace();
} finally {
// Close the browser
driver.quit();
}
}
}
“
Yogendra Porwal
Hi Sabbir,
Use some other sites like “https://tutorialsninja.com/demo/” , google.com does not allow traffic to be scanned.
Sabbir
[INFO] T E S T S
[INFO] ——————————————————-
[INFO] Running SeleniumTest
SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
5794 [main] ERROR ZapUtil – Error during active scan.
java.lang.IllegalStateException: Not a JSON Object: 0
at com.google.gson.JsonElement.getAsJsonObject(JsonElement.java:165) ~[gson-2.11.0.jar:?]
at ZapUtil.isScanCompleted(ZapUtil.java:138) ~[test-classes/:?]
at ZapUtil.waitForScanCompletion(ZapUtil.java:123) ~[test-classes/:?]
at ZapUtil.testSet(ZapUtil.java:72) ~[test-classes/:?]
at SeleniumTest.runZapTest(SeleniumTest.java:10) ~[test-classes/:?]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[?:?]
at org.testng.internal.invokers.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:139) ~[testng-7.8.0.jar:7.8.0]
at org.testng.internal.invokers.TestInvoker.invokeMethod(TestInvoker.java:664) ~[testng-7.8.0.jar:7.8.0]
at org.testng.internal.invokers.TestInvoker.invokeTestMethod(TestInvoker.java:227) ~[testng-7.8.0.jar:7.8.0]
at org.testng.internal.invokers.MethodRunner.runInSequence(MethodRunner.java:50) ~[testng-7.8.0.jar:7.8.0]
at org.testng.internal.invokers.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:957) ~[testng-7.8.0.jar:7.8.0]
at org.testng.internal.invokers.TestInvoker.invokeTestMethods(TestInvoker.java:200) ~[testng-7.8.0.jar:7.8.0]
at org.testng.internal.invokers.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:148) ~[testng-7.8.0.jar:7.8.0]
at org.testng.internal.invokers.TestMethodWorker.run(TestMethodWorker.java:128) ~[testng-7.8.0.jar:7.8.0]
at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) [?:?]
at org.testng.TestRunner.privateRun(TestRunner.java:848) [testng-7.8.0.jar:7.8.0]
at org.testng.TestRunner.run(TestRunner.java:621) [testng-7.8.0.jar:7.8.0]
at org.testng.SuiteRunner.runTest(SuiteRunner.java:443) [testng-7.8.0.jar:7.8.0]
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:437) [testng-7.8.0.jar:7.8.0]
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:397) [testng-7.8.0.jar:7.8.0]
at org.testng.SuiteRunner.run(SuiteRunner.java:336) [testng-7.8.0.jar:7.8.0]
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) [testng-7.8.0.jar:7.8.0]
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:95) [testng-7.8.0.jar:7.8.0]
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1280) [testng-7.8.0.jar:7.8.0]
at org.testng.TestNG.runSuitesLocally(TestNG.java:1200) [testng-7.8.0.jar:7.8.0]
at org.testng.TestNG.runSuites(TestNG.java:1114) [testng-7.8.0.jar:7.8.0]
at org.testng.TestNG.run(TestNG.java:1082) [testng-7.8.0.jar:7.8.0]
at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:136) [surefire-testng-3.0.0-M5.jar:3.0.0-M5]
at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.executeSingleClass(TestNGDirectoryTestSuite.java:112) [surefire-testng-3.0.0-M5.jar:3.0.0-M5]
at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.execute(TestNGDirectoryTestSuite.java:99) [surefire-testng-3.0.0-M5.jar:3.0.0-M5]
at org.apache.maven.surefire.testng.TestNGProvider.invoke(TestNGProvider.java:145) [surefire-testng-3.0.0-M5.jar:3.0.0-M5]
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:428) [surefire-booter-3.0.0-M5.jar:3.0.0-M5]
at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162) [surefire-booter-3.0.0-M5.jar:3.0.0-M5]
at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:562) [surefire-booter-3.0.0-M5.jar:3.0.0-M5]
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:548) [surefire-booter-3.0.0-M5.jar:3.0.0-M5]
5816 [main] ERROR ZapUtil – Error generating ZAP report.
org.zaproxy.clientapi.core.ClientApiException: Does Not Exist
at org.zaproxy.clientapi.core.ApiResponseFactory.getResponse(ApiResponseFactory.java:50) ~[zap-clientapi-1.14.0.jar:1.14.0]
at org.zaproxy.clientapi.core.ClientApi.callApi(ClientApi.java:390) ~[zap-clientapi-1.14.0.jar:1.14.0]
at org.zaproxy.clientapi.core.ClientApi.callApi(ClientApi.java:379) ~[zap-clientapi-1.14.0.jar:1.14.0]
at org.zaproxy.clientapi.gen.Reports.generate(Reports.java:114) ~[zap-clientapi-1.14.0.jar:1.14.0]
at ZapUtil.zapReport(ZapUtil.java:91) ~[test-classes/:?]
at SeleniumTest.runZapTest(SeleniumTest.java:14) ~[test-classes/:?]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[?:?]
at org.testng.internal.invokers.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:139) ~[testng-7.8.0.jar:7.8.0]
at org.testng.internal.invokers.TestInvoker.invokeMethod(TestInvoker.java:664) ~[testng-7.8.0.jar:7.8.0]
at org.testng.internal.invokers.TestInvoker.invokeTestMethod(TestInvoker.java:227) ~[testng-7.8.0.jar:7.8.0]
at org.testng.internal.invokers.MethodRunner.runInSequence(MethodRunner.java:50) ~[testng-7.8.0.jar:7.8.0]
at org.testng.internal.invokers.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:957) ~[testng-7.8.0.jar:7.8.0]
at org.testng.internal.invokers.TestInvoker.invokeTestMethods(TestInvoker.java:200) ~[testng-7.8.0.jar:7.8.0]
at org.testng.internal.invokers.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:148) ~[testng-7.8.0.jar:7.8.0]
at org.testng.internal.invokers.TestMethodWorker.run(TestMethodWorker.java:128) ~[testng-7.8.0.jar:7.8.0]
at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) [?:?]
at org.testng.TestRunner.privateRun(TestRunner.java:848) [testng-7.8.0.jar:7.8.0]
at org.testng.TestRunner.run(TestRunner.java:621) [testng-7.8.0.jar:7.8.0]
at org.testng.SuiteRunner.runTest(SuiteRunner.java:443) [testng-7.8.0.jar:7.8.0]
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:437) [testng-7.8.0.jar:7.8.0]
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:397) [testng-7.8.0.jar:7.8.0]
at org.testng.SuiteRunner.run(SuiteRunner.java:336) [testng-7.8.0.jar:7.8.0]
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) [testng-7.8.0.jar:7.8.0]
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:95) [testng-7.8.0.jar:7.8.0]
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1280) [testng-7.8.0.jar:7.8.0]
at org.testng.TestNG.runSuitesLocally(TestNG.java:1200) [testng-7.8.0.jar:7.8.0]
at org.testng.TestNG.runSuites(TestNG.java:1114) [testng-7.8.0.jar:7.8.0]
at org.testng.TestNG.run(TestNG.java:1082) [testng-7.8.0.jar:7.8.0]
at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:136) [surefire-testng-3.0.0-M5.jar:3.0.0-M5]
at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.executeSingleClass(TestNGDirectoryTestSuite.java:112) [surefire-testng-3.0.0-M5.jar:3.0.0-M5]
at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.execute(TestNGDirectoryTestSuite.java:99) [surefire-testng-3.0.0-M5.jar:3.0.0-M5]
at org.apache.maven.surefire.testng.TestNGProvider.invoke(TestNGProvider.java:145) [surefire-testng-3.0.0-M5.jar:3.0.0-M5]
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:428) [surefire-booter-3.0.0-M5.jar:3.0.0-M5]
at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162) [surefire-booter-3.0.0-M5.jar:3.0.0-M5]
at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:562) [surefire-booter-3.0.0-M5.jar:3.0.0-M5]
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:548) [surefire-booter-3.0.0-M5.jar:3.0.0-M5]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 5.775 s – in SeleniumTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 11.288 s
[INFO] Finished at: 2024-07-12T16:57:28+06:00
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 11.288 s
[INFO] Finished at: 2024-07-12T16:57:28+06:00
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 11.288 s
[INFO] Finished at: 2024-07-12T16:57:28+06:00
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 11.288 s
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 11.288 s
[INFO] Finished at: 2024-07-12T16:57:28+06:00
[INFO] ————————————————————————
Yogendra Porwal
Hi Sabbir,
You are providing incorrent arguements to generate report method.
refer here “https://www.zaproxy.org/docs/desktop/addons/report-generation/templates/” for all possible values.
X22Unisp
Hey people!!!!!
Good mood and good luck to everyone!!!!!